From: georggi Date: Sat, 19 Dec 2015 09:06:26 +0000 (+0200) Subject: Handle missing titles and usernames when importing log items X-Git-Tag: 1.31.0-rc.0~8621^2 X-Git-Url: http://git.cyclocoop.org/%7D%7Cconcat%7B?a=commitdiff_plain;h=b14d581dab129f00135a0136ef2727ce0f8f9282;p=lhc%2Fweb%2Fwiklou.git Handle missing titles and usernames when importing log items Bug: T121338 Change-Id: Idf95263e4f22225509da4ee07fcb14383028894b --- diff --git a/includes/Import.php b/includes/Import.php index 519f74a81b..ee1cab54ee 100644 --- a/includes/Import.php +++ b/includes/Import.php @@ -660,14 +660,26 @@ class WikiImporter { * @return bool|mixed */ private function processLogItem( $logInfo ) { + $revision = new WikiRevision( $this->config ); - $revision->setID( $logInfo['id'] ); + if ( isset( $logInfo['id'] ) ) { + $revision->setID( $logInfo['id'] ); + } $revision->setType( $logInfo['type'] ); $revision->setAction( $logInfo['action'] ); - $revision->setTimestamp( $logInfo['timestamp'] ); - $revision->setParams( $logInfo['params'] ); - $revision->setTitle( Title::newFromText( $logInfo['logtitle'] ) ); + if ( isset( $logInfo['timestamp'] ) ) { + $revision->setTimestamp( $logInfo['timestamp'] ); + } + if ( isset( $logInfo['params'] ) ) { + $revision->setParams( $logInfo['params'] ); + } + if ( isset( $logInfo['logtitle'] ) ) { + // @todo Using Title for non-local titles is a recipe for disaster. + // We should use ForeignTitle here instead. + $revision->setTitle( Title::newFromText( $logInfo['logtitle'] ) ); + } + $revision->setNoUpdates( $this->mNoUpdates ); if ( isset( $logInfo['comment'] ) ) { @@ -677,7 +689,10 @@ class WikiImporter { if ( isset( $logInfo['contributor']['ip'] ) ) { $revision->setUserIP( $logInfo['contributor']['ip'] ); } - if ( isset( $logInfo['contributor']['username'] ) ) { + + if ( !isset( $logInfo['contributor']['username'] ) ) { + $revision->setUsername( 'Unknown user' ); + } else { $revision->setUserName( $logInfo['contributor']['username'] ); } @@ -1655,6 +1670,16 @@ class WikiRevision { function importLogItem() { $dbw = wfGetDB( DB_MASTER ); + + $user = User::newFromName( $this->getUser() ); + if ( $user ) { + $userId = intval( $user->getId() ); + $userText = $user->getName(); + } else { + $userId = 0; + $userText = $this->getUser(); + } + # @todo FIXME: This will not record autoblocks if ( !$this->getTitle() ) { wfDebug( __METHOD__ . ": skipping invalid {$this->type}/{$this->action} log time, timestamp " . @@ -1687,8 +1712,8 @@ class WikiRevision { 'log_type' => $this->type, 'log_action' => $this->action, 'log_timestamp' => $dbw->timestamp( $this->timestamp ), - 'log_user' => User::idFromName( $this->user_text ), - # 'log_user_text' => $this->user_text, + 'log_user' => $userId, + 'log_user_text' => $userText, 'log_namespace' => $this->getTitle()->getNamespace(), 'log_title' => $this->getTitle()->getDBkey(), 'log_comment' => $this->getComment(), diff --git a/maintenance/importDump.php b/maintenance/importDump.php index 8cea5a2c5d..6b7cfb6ac1 100644 --- a/maintenance/importDump.php +++ b/maintenance/importDump.php @@ -135,16 +135,24 @@ TEXT; * @return bool */ private function skippedNamespace( $obj ) { + $title = null; if ( $obj instanceof Title ) { - $ns = $obj->getNamespace(); + $title = $obj; } elseif ( $obj instanceof Revision ) { - $ns = $obj->getTitle()->getNamespace(); + $title = $obj->getTitle(); } elseif ( $obj instanceof WikiRevision ) { - $ns = $obj->title->getNamespace(); + $title = $obj->title; } else { throw new MWException( "Cannot get namespace of object in " . __METHOD__ ); } + if ( is_null( $title ) ) { + // Probably a log entry + return false; + } + + $ns = $title->getNamespace(); + return is_array( $this->nsFilter ) && !in_array( $ns, $this->nsFilter ); }